/*
 * Copyright (c) 2018-2999 湖南洛云网络科技有限公司 All rights reserved.
 *
 * https://www.gz-yami.com/
 *
 */

package com.yami.shop.service;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yami.shop.bean.dto.OrderRefundDto;
import com.yami.shop.bean.enums.SendType;
import com.yami.shop.bean.model.NotifyTemplate;
import com.yami.shop.bean.model.Order;
import com.yami.shop.bean.model.OrderRefund;
import com.yami.shop.bean.model.User;
import com.yami.shop.common.util.PageParam;

import java.util.List;

/**
 *
 *
 * @author lhd
 * @date 2020-07-01 15:44:27
 */
public interface NotifyTemplateService extends IService<NotifyTemplate> {


    /**
     * 消息推送-开团提醒、拼团成功提醒、拼团失败提醒
     * @param order 订单
     * @param groupStart 拼团开始
     */
    void sendNotifyOfGroupStart(Order order, SendType groupStart);

    /**
     * 消息推送-支付成功
     * @param orders 多个订单
     */
    void sendNotifyOfPaySuccess(List<Order> orders);

    /**
     * 消息推送-申请退款
     * @param order 订单
     * @param orderRefund 退款信息
     */
    void sendNotifyOfApplyRefund(Order order, OrderRefund orderRefund);

    /**
     * 消息推送-同意退款、拒绝退款、退款临近超时
     * @param orderRefundDto 退款信息
     * @param agreeRefund 类型
     */
    void sendNotifyByRefund(OrderRefundDto orderRefundDto, SendType agreeRefund);

    /**
     * 消息推送-发货提醒、订单催付提醒
     * @param order 订单
     * @param dvyName 物流公司名称
     * @param sendType 类型
     */
    void sendNotifyOfDelivery(Order order, String dvyName, SendType sendType);

    /**
     * 升级提醒
     * @param levelName 会员名称
     * @param user 用户信息
     */
    void sendNotifyOfLevelUp(String levelName, User user);

    /**
     * 消息推送-用户已经确认收货、买家已退货
     * @param order 订单信息
     * @param returnRefund 类型
     */
    void sendNotifyByUserRefundDelivery(Order order, SendType returnRefund);

    /**
     * 消息推送，核销通知
     * @param stationName 自提点名称
     * @param order 订单信息
     */
    void writeOffOrder(String stationName, Order order);

    /**
     * 保存标签消息
     * @param notifyTemplate 消息模板
     */
    void saveTagNotify(NotifyTemplate notifyTemplate);


    /**
     * 消息模板分页获取
     * @param page 分页参数
     * @return 消息模板分页数据
     */
    IPage<NotifyTemplate> pageTagNotify(PageParam<NotifyTemplate> page);

}
